from autogen import ConversableAgent, LLMConfig
from autogen.agentchat import initiate_group_chat
from autogen.agentchat.group.patterns import AutoPattern,RoundRobinPattern,RandomPattern

from env import SYSTEM_PROMOPT

api_key = "sk-e7a0e0fbeaa54443aeb12a9bee6e2321"
llm_config = LLMConfig(api_type="openai", 
                       model="deepseek-chat",
                       api_key=api_key,
                       base_url="https://api.deepseek.com")
llm = { 
    "config_list": [
            {
                "model": "deepseek-chat",  # DeepSeek 的模型名称
                "api_key": api_key,
                "base_url": "https://api.deepseek.com/v1",  # DeepSeek API 地址
                "api_type": "openai",  # 如果 DeepSeek 兼容 OpenAI API 格式
            }
    ],
    "stream": True  # 关键：启用流式输出
}
PROGRAMER = f"""
{SYSTEM_PROMOPT}
你是一位专业的全栈程序员，使用下面的技术栈：
##后端
1、后端编程语言 c# dotnetcore
2、http框架:aspnet core
3、使用volo.abp 8.3版本
4、使用efcore作为orm框架
5、实现数据库读写分离
6、代码规范整洁，使用xml注释
##前端
1、编程语言:typescript
2、框架vue3
3、路由vue-router 4.x
4、ui框架antd 4.x
5、vue状态管理pina
"""

PROJECT_MANAGER =f"""
{SYSTEM_PROMOPT}
你是一位产品经理，负责规划项目的功能和实现，尽量具体一些。
1、规划处菜单和功能
2、每个功能需要的表和字段
3、规划出每个功能需要的输入和输出参数字段
"""

TESTER =f"""
{SYSTEM_PROMOPT}
你是一位专业的测试人员，写出测试用例并进行测试
"""

with llm_config:
    triage_agent = ConversableAgent(
        name="project_manager",
        description="产品经理，负责产品规划",
        system_message=PROJECT_MANAGER,
        llm_config=llm_config,
        model_client_stream=True
    )

    tech_agent = ConversableAgent(
        name="programer",
        description="程序员,负责代码实现",
        system_message=PROGRAMER,
        llm_config=llm_config,
        model_client_stream=True
    )

    general_agent = ConversableAgent(
        name="tester",
        description="测试员，测试程序员写的功能是否存在BUG且是否符合产品经理的规划",
        system_message=TESTER,
        llm_config=llm_config,
        model_client_stream=True
    )

user = ConversableAgent(name="user", human_input_mode="ALWAYS")

pattern = RoundRobinPattern(
    initial_agent=triage_agent,
    agents=[triage_agent, tech_agent, general_agent],
    user_agent=user,
    group_manager_args={"llm_config": llm_config}
)

result, context, last_agent = initiate_group_chat(
    pattern=pattern,
    messages="开发一个租户管理的功能?",
    max_rounds=5,
)
